Безопасный код

Дмитрий Масленников, «Т-Банк»

Удобное для обслуживания приложение

Время запуска

Время запуска такая же важная характеристика, как и остальные. Софт, который может быстро стартовать намного более устойчив к сбоям.

Быстрые релизы и откаты

Быстрые релизы и откаты могут замедляться не только медленным рестартом, но и ограничениями в CI/CD.

Надо обеспечить возможность отката всегда

Нужна обратная совместимость по API и по данным

Данные может обновлять само приложение

Переключение feature-toggle тоже должно быть обратимо!

Умение переподключаться к зависимостям

Включая возможность стартовать без зависимостей и отчет о статусе зависимостей

Уплавление логами по API

  • Умение менять уровень логгирования на лету
  • Умение управлять семплированием логов
  • Умение увеличить логгирование для конкретного запроса

Повторы

Таймауты

  • Нельзя доверять умолчаниям
  • Не надо процессить запросы, которые уже затаймаутились
  • Удобно иметь глобальные таймауты

Идемпотентные операции

Все операции внешнего API удобно сделать идемпотентными

Повторы

  • Не забыть выключатели
  • Экспоненциальное затухание и случайный сдвиг по времени
  • Не повторять то, что уже затаймаутилось

Лимиты

Сервис должен выставлять максимальный QPS и отвечать специальным кодом, если перегружен.

При нагрузочном тестировании надо обязательно выходить за лимит и заходить обратно

Очереди

Используйте LIFO очереди и очереди с фиксированным временем жизни, если применимо

Спасибо!

Вопросы?